import json
import unittest
from flask import url_for
from app import app, db
import hashlib


class Test(unittest.TestCase):
    """测试案例"""

    def setUp(self):
        app.testing = True
        self.client = app.test_client()

    def test_error_username_password(self):
        """测试用户名和密码错误的情况"""
        response = app.test_client().post('/login', data={"account": "12312320679", "md5_pwd": "1234"})

        # respoonse.data是响应体数据
        resp_json = response.data

        # 按照json解析
        resp_dict = json.loads(resp_json)

        # 使用断言进行验证：是否存在code字符串在字典中
        self.assertIn("code", resp_dict)

        # 获取code的返回码的值，验证是否为错误码 1
        code = resp_dict.get("code")
        try:
            self.assertEqual(code, 1)
            print ("登录错误测试 通过")
        except:
            print ("登录错误测试 未通过")

    def test_login(self):
        """测试成功登录的情况"""
        pwd = "991123"
        m=hashlib.md5()
        m.update(pwd.encode(encoding='utf-8'))
        response = app.test_client().post('/login', data={"account": "13613520679", "md5_pwd": m.hexdigest()})

        # respoonse.data是响应体数据
        resp_json = response.data

        # 按照json解析
        resp_dict = json.loads(resp_json)

        # 使用断言进行验证：是否存在code字符串在字典中
        self.assertIn("code", resp_dict)

        # 获取code的返回码的值，验证是否为错误码 2
        code = resp_dict.get("code")
        try:
            self.assertEqual(code, 2)
            print ("登录成功测试 通过")
        except:
            print ("登录成功测试 未通过")

    def test_error_sign_password(self):
        """测试用户存在的情况"""
        response = app.test_client().post('/sign', data={"account": "13613520679", "md5_pwd": "1234321"})

        # respoonse.data是响应体数据
        resp_json = response.data

        # 按照json解析
        resp_dict = json.loads(resp_json)

        # 使用断言进行验证：是否存在code字符串在字典中
        self.assertIn("code", resp_dict)

        # 获取code的返回码的值，验证是否为错误码 65535
        code = resp_dict.get("code")
        try:
            self.assertEqual(code, 1)
            print ("注册错误测试 通过")
        except:
            print ("注册错误测试 未通过")

    def test_sign_password(self):
        """测试用户不存在的情况(成功)"""
        pwd = "991123"
        m=hashlib.md5()
        m.update(pwd.encode(encoding='utf-8'))
        response = app.test_client().post('/sign', data={"account": "12345678910", "md5_pwd": m.hexdigest(), "nickname":"test123"})

        # respoonse.data是响应体数据
        resp_json = response.data

        # 按照json解析
        resp_dict = json.loads(resp_json)

        # 使用断言进行验证：是否存在code字符串在字典中
        self.assertIn("code", resp_dict)

        # 获取code的返回码的值，验证是否为错误码 65535
        code = resp_dict.get("code")
        try:
            self.assertEqual(code, 2)
            print ("注册成功测试 通过")
        except:
            print ("注册成功测试 未通过")

    def test_add_essay(self):
        """测试添加文章"""
        response = app.test_client().post('/person', data={"content": "test123"})

        # respoonse.data是响应体数据
        resp_json = response.data

        # 按照json解析
        resp_dict = json.loads(resp_json)

        # 使用断言进行验证：是否存在code字符串在字典中
        self.assertIn("code", resp_dict)

        # 获取code的返回码的值，验证是否为错误码 65535
        code = resp_dict.get("code")
        try:
            self.assertEqual(code, 0)
            print ("添加文章成功测试 通过")
        except:
            print ("添加文章成功测试 未通过")

    def test_delete_essay(self):
        """测试添加文章"""
        try:
            response = app.test_client().post('/delete/2')
            print ("删除文章成功测试 通过")
        except:
            print ("删除文章成功测试 未通过")

    def test_follow(self):
        """测试关注页面功能"""
        response = app.test_client().post('/follow/4', data={"content": "13613520679"})

        # respoonse.data是响应体数据
        resp_json = response.data

        # 按照json解析
        resp_dict = json.loads(resp_json)

        # 使用断言进行验证：是否存在code字符串在字典中
        self.assertIn("code", resp_dict)

        # 获取code的返回码的值，验证是否为错误码 65535
        code = resp_dict.get("code")
        try:
            self.assertEqual(code, 0)
            print ("关注测试 通过")
        except:
            print ("关注测试 未通过")

    def test_follow_it(self):
        """测试关注功能"""
        try:
            response = app.test_client().post('/follow/1')
            print ("关注测试 通过")
        except:
            print ("关注测试 未通过")

    def test_not_follow_it(self):
        """测试取消关注功能"""
        try:
            response = app.test_client().post('/not_follow/1')
            print ("取消关注测试 通过")
        except:
            print ("取消关注测试 未通过")

    def test_follow(self):
        """测试信息修改功能"""
        response = app.test_client().post('/info/4', data={"nickname": "finish"})

        # respoonse.data是响应体数据
        resp_json = response.data

        # 按照json解析
        resp_dict = json.loads(resp_json)

        # 使用断言进行验证：是否存在code字符串在字典中
        self.assertIn("code", resp_dict)

        # 获取code的返回码的值，验证是否为错误码 65535
        code = resp_dict.get("code")
        try:
            self.assertEqual(code, 0)
            print ("信息修改测试 通过")
        except:
            print ("信息修改测试 未通过")

if __name__ == '__main__':
    unittest.main()
